package gui.view.drawers.editor;

import java.awt.Graphics;
import java.awt.Point;
import java.awt.Rectangle;
import java.util.List;

import model.MetroModel;
import model.objects.EdiStation;
import model.objects.EdiTunnel;


import com.nightpiter.model.objects.*;

public interface EditorsDrawer {	
	/**
	 * draw metro
	 * @param model metro model to draw
	 * @param selection selected stations	 * 
	 */
	public void draw(List<EdiStation> stationSelection, List<EdiTunnel> tunneSelection, Graphics g, boolean showStationLabels);
	
	/**
	 * shift metro map
	 * @param dx shifting by 0X axis
	 * @param dy shifting by 0Y axis
	 */
	public void shift(int dx, int dy);
	
	public void setDrawerCenter(int x, int y);
	
	/**
	 * get rectangle that must be repainted on single station repaint 
	 * @param station
	 * @return
	 */
	public Rectangle getRedrawRect(EdiStation station);
	
	/**
	 * get rectangle that must be repainted on single transition repaint 
	 * @param station
	 * @return
	 */
	public Rectangle getRedrawRect(Transition trans);
	
	/**
	 * get station by relative point
	 * @param model
	 * @param point
	 * @return
	 */
	public List<EdiStation> getStation(Point point);
	
	public List<EdiTunnel> getTunnel(Point point);
	
	public EdiStation getLabelsStation(Point point);
	
	public Coordinates getAbsolutePoint(Point local);
	
	/**
	 * scale getter and setter
	 * @return
	 */
	public float getScale();
	
	/**
	 * set map scale
	 * @param scale
	 */
	public void setScale(float scale);
}
